package com.example.jimanguang.web.models;


import com.example.jimanguang.Entity.User;
import com.example.jimanguang.Repositories.untils.AuthUtils;
import lombok.Getter;
import lombok.Setter;

import java.util.Date;
import java.util.UUID;

@Getter
@Setter
public class VmUser {//为什么创建视图模型，因为要保持数据可泄性。相当于封装起来了。
//第一次从数据库中得到uers
    //第二次从服务器内存得到。
    private UUID id;
    private String nickName;
    private String userName;
    private String enail;
    private String phone;
    // private String password;
    private String avatar;//头像
    private int type;
    //private String salt;//随机码，用户密码的安全性
    //private boolean applyTeacher;
    private String token;//令牌
    private Date lastLogin;//最后登录时间
    //加入构造器

    private VmUser(){}


    private VmUser(User user){//对user进行包装和转换 //用于登录用户构造的
        id =user.getId();
        nickName=user.getNickName();
        userName= user.getUserName();
        enail =user.getEnail();
        phone=user.getPhone();
        avatar=user.getAvatar();
        type= user.getType();
        token=UUID.randomUUID().toString();
        //服务器内存
        lastLogin=new Date();
        AuthUtils.USERS.add(this);//同时保存服务器内存
    }
    public static VmUser create(User user,boolean admin){//用户管理用的
        VmUser vm = new VmUser();
        vm.setId(user.getId());
        vm.setAvatar(user.getAvatar());
        vm.setToken("");
        vm.setNickName(user.getNickName());
        if(admin){//如果是管理用户可以看见
            vm.setUserName(user.getUserName());
            vm.setType(user.getType());
        }
        else {
            vm.setUserName("");
            vm.setType(User.TYPE_READER);
            vm.setEnail("");
            vm.setPhone("");
        }
        return vm;
    }
    //登录操作
    public static VmUser apiLogin(User user){
       VmUser vm=AuthUtils.USERS.
               stream().
               filter(u ->u.userName.equals(user.getUserName()))
               .findFirst()//查找满足条件
                .orElse(null);
        if(vm==null){
            vm=new VmUser(user);
        }else{
                 //登录的那时候产生的时间
            vm.lastLogin=new Date();
        }
        return vm;
    }
}
